const cacheName = "v1";
const cacheList = ["/dist/index.js"];

/**
 * 安装&激活
 */
this.addEventListener("install", async (event) => {
  // event.waitUtil中定义安装过程中需要执行的操作，操作执行完毕后才代表安装完成
  event.waitUtil(
    caches
      .open(cacheName)
      .then((cache) => cache.addAll(cacheList)) // 安装过程中对下载了的文件进行缓存
      .then(self.skipWaiting) // 激活获取页面的控制权
  );
});

/**
 * 响应缓存
 */
this.addEventListener("fetch", (event) => {
  const waitFun = async () => {
    try {
      // 获取缓存响应的内容
      let response = await caches.match(event.request);

      // 缓存无效，发起网络请求获取资源，将获取资源缓存起来
      if (!response) {
        response = await fetch(event.request.clone());
        const cache = await caches.open(cacheName);
        cache.put(event.request, response.clone());
      }

      return response;
    } catch (error) {
      return caches.match("error.jpg");
    }
  };

  event.waitUtil(waitFun);
});

/**
 * 更新
 * 当 SW 执行代码更新时
 */
self.addEventListener("activate", (event) => {
  event.waitUntil(
    Promise.all([
      clearCache(),
      self.clients.claim(), // 立马让当前页面获得当前serviceWorker获得控制权
    ])
  );
});
